﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ConfeccionesJR.Entites;
using ConfeccionesJR.BussinesLogic;
using Microsoft.Practices.Unity;

namespace ConfeccionesJR.UI
{
    public partial class frmProducto : Form
    {
        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public IDetalleProductoBL detProductoBL { get; set; }

        [Dependency]
        public IImpuestoBL impuestoBL { get; set; }

        [Dependency]
        public IUnidadMedidaBL undMedidaBL { get; set; }

        [Dependency]
        public IMaterialBL materialBL { get; set; }


        public frmProducto()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void frmProducto_Load(object sender, EventArgs e)
        {
            pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();

            PRODUCTO currentProd = pRODUCTOBindingSource.Current as PRODUCTO;

            if (currentProd != null)
            {
                var detalles = detProductoBL.GetAllFromDetalleProductoByProductoId(currentProd.Id);
                dETALLE_PRODUCTOBindingSource.DataSource = detalles;               

                Suma();
            }
            else LTotal.Text = "0.00";
        }

        public void Suma()
        {
            var _producto = pRODUCTOBindingSource.Current as PRODUCTO;

            if (_producto != null)
            {
                dETALLE_PRODUCTOBindingSource.DataSource = detProductoBL.GetAllFromDetalleProductoByProductoId(_producto.Id);

                var _total = Math.Round(_producto.Precio, 2);
                LTotal.Text = _total.ToString();
            }
            else LTotal.Text = "0.00";

        }

        private void BtnBuscar_Click(object sender, EventArgs e)
        {
            TodosBuscar();
        }

        private void TodosBuscar()
        {
            if (rbtnGeneral.Checked == true)
            {
                //if (TxtDescripcion.Text.Length > 0)
                //{
                pRODUCTOBindingSource.DataSource = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);
                //}
            }

            if (rbtnStock.Checked == true)
            {
                //if (TxtDescripcion.Text.Length > 0)
                //{
                var _minimo = Convert.ToInt32(impuestoBL.GetFromImpuestoById(5).Porcentaje);
                pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProductosByDescripcionAndStockBajo(TxtDescripcion.Text, _minimo);
                //}
            }

            var _currentProducto = pRODUCTOBindingSource.Current as PRODUCTO;
            {
                if (_currentProducto != null)
                {
                    dETALLE_PRODUCTOBindingSource.DataSource = detProductoBL.GetAllFromDetalleProductoByProductoId(_currentProducto.Id);
                }
                else
                {
                    dETALLE_PRODUCTOBindingSource.Clear();
                }
            }
            
        }
        
        private void TxtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                TodosBuscar();
            }           
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            frmMttoProducto frm = new frmMttoProducto();
            frm.Nuevo();
            frm.ShowDialog();
            pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();  
        }

        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            PRODUCTO currentProducto = pRODUCTOBindingSource.Current as PRODUCTO;

            if (currentProducto != null)
            {
                frmMttoProducto frm = new frmMttoProducto();

                //frm.IdProd = currentProducto.Id;
                frm.Editar(currentProducto.Id);
                frm.ShowDialog();
                pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Producto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void rbtnStock_Click(object sender, EventArgs e)
        {
            TodosBuscar();
        }

        private void rbtnGeneral_Click(object sender, EventArgs e)
        {
            TodosBuscar();
        }

        private void TxtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");
            var slash = Convert.ToString(",");
            var punto = Convert.ToString(".");
            string cadena = guion + slash + punto + (char)8;

            if (!cadena.Contains(e.KeyChar) && !(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar))
                && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear)
                && !(char.IsSeparator(e.KeyChar)))
            {
                e.Handled = true;
                return;
            }
        }

        private void pRODUCTODataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            try
            {
                int nroColumn = 3;

                for (int count = 0; count < pRODUCTODataGridView.Rows.Count; count++)
                {
                    var montoMinimo = Convert.ToInt32(impuestoBL.GetFromImpuestoById(5).Porcentaje);
                    
                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[nroColumn].Value) >= montoMinimo)
                    {
                        pRODUCTODataGridView[nroColumn, count].Style.BackColor = System.Drawing.Color.Green; //SOLO LA COLUMNA
                    }

                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[nroColumn].Value) < montoMinimo
                        && Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[nroColumn].Value) > 0)
                    {
                        pRODUCTODataGridView[nroColumn, count].Style.BackColor = System.Drawing.Color.Yellow; 
                    }

                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[nroColumn].Value) == 0)
                    {
                        pRODUCTODataGridView[nroColumn, count].Style.BackColor = System.Drawing.Color.Red; 
                    }
                    else
                    {
                        pRODUCTODataGridView.Rows[count].DefaultCellStyle.BackColor = System.Drawing.Color.White;
                    }
                }
            }
            catch (Exception)
            { 
                MessageBox.Show("Revise sus reglas de negocio");
            }
        }

        private void pRODUCTODataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            var currentProd = pRODUCTOBindingSource.Current as PRODUCTO;

            if (currentProd != null)
            {
                dETALLE_PRODUCTOBindingSource.DataSource = detProductoBL.GetAllFromDetalleProductoByProductoId(currentProd.Id);
                Suma();
            }
            else LTotal.Text = "0.00";

            #region UndMedida
            try
            {
                for (int count = 0; count < dETALLE_PRODUCTODataGridView.Rows.Count; count++)
                {

                    if (currentProd != null)
                    {
                        MATERIAL a = dETALLE_PRODUCTODataGridView.Rows[count].Cells[1].Value as MATERIAL;
                        var und = undMedidaBL.GetFromUnidadMedidaById(a.unidadMedidaId);
                        dETALLE_PRODUCTODataGridView.Rows[count].Cells[2].Value = und.Descripcion.ToString();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
            #endregion
        }

        private void pRODUCTODataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            Suma();

            #region UndMedida
            try
            {
                var currentProd = pRODUCTOBindingSource.Current as PRODUCTO;

                for (int count = 0; count < dETALLE_PRODUCTODataGridView.Rows.Count; count++)
                {

                    if (currentProd != null)
                    {
                        MATERIAL a = dETALLE_PRODUCTODataGridView.Rows[count].Cells[1].Value as MATERIAL;
                        var und = undMedidaBL.GetFromUnidadMedidaById(a.unidadMedidaId);
                        dETALLE_PRODUCTODataGridView.Rows[count].Cells[2].Value = und.Descripcion.ToString();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error");
            }
            #endregion
        }

        private void BtnBuscarProducto_Click(object sender, EventArgs e)
        {
            BuscarEnDetalleProducto();
        }

        private void TxtProductoDesc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarEnDetalleProducto();
            }
        }

        private void BuscarEnDetalleProducto()
        {
            var currentProd = pRODUCTOBindingSource.Current as PRODUCTO;

            if (currentProd != null)
            {
                dETALLE_PRODUCTOBindingSource.DataSource = detProductoBL.GetFromDetalleProductoByMaterialAndProductoId(TxtProductoDesc.Text, currentProd.Id);
            }
            else
            {
                MessageBox.Show("Debe seleccionar una Producto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void dETALLE_PRODUCTODataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            #region UndMedida
            try
            {
                var currentProd = pRODUCTOBindingSource.Current as PRODUCTO;

                for (int count = 0; count < dETALLE_PRODUCTODataGridView.Rows.Count; count++)
                {

                    if (currentProd != null)
                    {
                        MATERIAL a = dETALLE_PRODUCTODataGridView.Rows[count].Cells[1].Value as MATERIAL;
                        var und = undMedidaBL.GetFromUnidadMedidaById(a.unidadMedidaId);
                        dETALLE_PRODUCTODataGridView.Rows[count].Cells[2].Value = und.Descripcion.ToString();
                    }
                }
            }
            catch (Exception)
            {
                //MessageBox.Show("Error");
            }
            #endregion
        }

        


    }
}
